home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 1 / Gekikoh Dennoh Club Vol. 1 (Japan).7z / Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin / tools / pcd2 / src / pcd2.has < prev    next >
Text File  |  1997-03-23  |  17KB  |  820 lines

  1. *************************************************
  2. * 作るつもりはなかったけど
  3. * 電脳倶楽部CDに載ったので続編
  4. * PCD(通).x
  5. * 著作権は可能な限り放棄します
  6. * 改造等は、貴方の良心に従って下さい
  7. * 実行形式・ソース共、利用に制限はありませんが
  8. * 無保証であることだけは保証します
  9. *                 by Fa.Tom 1996
  10. *************************************************
  11.  
  12. *------------------------------
  13. * インクルード&外部参照
  14. *------------------------------
  15.     .include    doscall.mac
  16.     .include    iocscall.mac
  17.     .include    const.h
  18.     .xref    Make_Table
  19.     .xref    GetFHdl
  20.     .xref    ChkPCD
  21.     .xref    GetFHdl_Break
  22.     .xref    YCC2XHI_S,YCC2XHI_X
  23.     .xref    PCD_MAIN
  24.     .xref    Seek_PCD,TC1
  25.     .xref    BASEDATA_X
  26.     .xref    BASEDATA_S
  27.     .xref    PF_PLAY,GA_INIT,GA_DISP
  28.     .xref    K_Clear
  29.     .xdef    IMAGE_NUM,V_FLAME,FLG_WP
  30.     .xdef    DEC_WORK
  31.     .xdef    SW_S,SW_Q,SW_K,SW_PF,Graph_Ptr,FLG_V,SW_P
  32.     .xdef    SW_LX,SW_LY,VCR2
  33. *------------------------------
  34. * プログラム部
  35. *------------------------------
  36.     .cpu    68000
  37.     .text
  38.     .align    4
  39. *    .dc.b    'PCD2 Fa.Tom-1996'
  40. *------------------------------
  41. * 初期化部(というほどではない)
  42. *------------------------------
  43. ProStart:
  44.     move.l    #-1,V_FLAME
  45.     lea.l    (StackBtm),sp
  46.  
  47.     lea.l    (16,a0),a0
  48.     sub.l    a0,a1
  49.     pea    (a1)
  50.     pea    (a0)
  51.     DOS    _SETBLOCK
  52.     addq.l    #8,sp
  53.  
  54.     lea.l    (a0,$b4),a0        * 実行ファイル名は変更を前提としております
  55.     move.l    a0,(ExecFN)        * PCD(通).xのまま使うバカはいないでしょうが
  56.     tst.b    (a2)+
  57.     beq    NoCMD
  58.     bsr    ChkCMD            * コマンドラインの解析ルーチンへ
  59.  
  60.     lea.l    (Print_Job),a6        * -Qによってメッセージ出力ルーチンを
  61.     tst.b    (SW_Q)            * 選択
  62.     beq    @f
  63.     lea.l    (NoPrint_Job),a6    * 中身は'rts'だけ
  64. @@:
  65.     suba.l    a1,a1
  66.     IOCS    _B_SUPER
  67.     move.l    d0,a1
  68.     move.w    ($e82600),(VCR2)
  69.     IOCS    _B_SUPER
  70.  
  71.     move.l    (ExecFN),a1        * やっとファーストメッセージの表示
  72.     jsr    (a6)
  73.     lea.l    (title_txt),a1
  74.     jsr    (a6)
  75.  
  76.     tst.b    (SW_H)
  77.     beq    @f
  78.     move.l    (ExecFN),a1
  79.     jsr    (a6)
  80.     lea.l    (Help_txt),a1
  81.     jsr    (a6)
  82.     bra    Pro_Exit
  83.  
  84. @@:
  85.     IOCS    _MS_INIT
  86.  
  87.     tst.b    (SW_FN)            * ファイル指定はあるか?
  88.     bne    @f
  89.     lea.l    (NoFile_Txt),a1
  90.     jsr    (a6)
  91.     st    (SW_E)            * ファイル指定の有無をコマンドラインエラーに反映
  92. @@:
  93.     tst.b    (SW_BE)
  94.     beq    @f
  95.     lea.l    (BrightErr_Txt),a1
  96.     jsr    (a6)
  97. @@:
  98.     tst.b    (SW_G)
  99.     bne    @f
  100.  
  101.     bsr    GA_INIT        *TS-6BGAとAGIOCSのチェック及び初期化 [pcd_ga.has]
  102.     move.l    d0,V_FLAME
  103.     tst.l    d0
  104.     bmi    @f
  105.     clr.b    (SW_S)
  106.     bra    1f
  107.  
  108. @@:
  109.     tst.b    (SW_F)            * GVRAMが使用されているかチェック
  110.     bne    @f            * -Fが影響する
  111.     moveq.l    #0,d1
  112.     moveq.l    #-1,d2
  113.     IOCS    _TGUSEMD
  114.     cmpi.w    #1,d0            * システムで使用中か?
  115.     bne    @f
  116.     lea.l    (GVRAM_SYSTEM_USE_txt),a1
  117.     jsr    (a6)
  118.     st    (SW_E)
  119.     bra    1f
  120. @@:
  121.     cmpi.w    #2,d0            * アプリケーションで使用中か?
  122.     bne    1f
  123.     lea.l    (GVRAM_APRI_USE_txt),a1
  124.     jsr    (a6)
  125.     st    (SW_E)
  126. 1:
  127.  
  128.     move.w    #-1,-(sp)    * 
  129.     move.w    #$e,-(sp)    * 現在のファンクションモードを検出
  130.     DOS    _CONCTRL    * 
  131.     addq.l    #4,sp        * 
  132.     move.w    d0,(FuncMODE)
  133.  
  134.     moveq.l    #-1,d0        * コマンドラインエラーが発覚していたら終了
  135.     tst.b    (SW_E)
  136.     bne    Pro_Exit2
  137.  
  138.     tst.l    V_FLAME
  139.     beq    @f
  140.  
  141.     tst.b    (SW_Q)
  142.     bne    @f
  143.  
  144.     move.l    #-1,d1
  145.     IOCS    _B_LOCATE
  146.     move.l    d0,d7
  147.  
  148.     move.w    #$0003,-(a7)    * 
  149.     move.w    #$000e,-(a7)    * ファンクション表示を消す
  150.     DOS    _CONCTRL    * 
  151.     addq.l    #4,a7        * 
  152.  
  153.     move.w    d7,d2
  154.     swap    d7
  155.     move.w    d7,d1
  156.     IOCS    _B_LOCATE
  157. @@:
  158.  
  159.     lea.l    (Target_File),a0
  160.     bsr    GetFHdl        * ファイルネームをオープン        [wild.has]
  161.     tst.l    d0
  162.     bpl    9f
  163. EXT_PLUS:            * "*"という指定に対応
  164.     tst.b    (a0)+
  165.     bne    EXT_PLUS
  166.     cmpi.b    #'.',(-2,a0)    * "filename."という指定に対応
  167.     bne    @f
  168.     subq.l    #1,a0
  169. @@:    move.b    #'.',(-1,a0)
  170.     move.b    #'P',(a0)+
  171.     move.b    #'C',(a0)+
  172.     move.b    #'D',(a0)+
  173.     clr.b    (a0)
  174.     lea.l    (Target_File),a0
  175.     bsr    GetFHdl        * ファイルネーム+[.PCD]をオープン        [wild.has]
  176.     tst.l    d0
  177.     bmi    NotFoundFile_err
  178.     st    (FLG_EXT)
  179. 9:
  180.     move.w    d0,FHdl
  181.  
  182.     move.w    (DEF_Y),d0    * 明るさ指定
  183.     bsr    Make_Table    * フォトYCCデコード用のテーブルを作る    [pcddec.has]
  184.  
  185.     tst.b    (SW_A)
  186.     bne    Load_Memory
  187.  
  188. 4:    move.w    FHdl,d0
  189.     bsr    PF_PLAY        *Portfolio再生            [pcd_pf.has]
  190.     tst.l    d0
  191.     beq    5f        *再生出来た
  192.     bmi    3f        *処理の中断が指示された
  193.     move.w    FHdl,d0
  194.     bsr    PCD_MAIN    * 表示担当のモジュールへ    [pcd_main.has]
  195.     bsr    K_Clear
  196. 5:    tst.l    d0
  197.     bgt    2f        * 表示出来なかった
  198.     bmi    3f        * 処理の中断が指示された
  199. 1:    st    (FLG_V)        * 一枚でも表示出来たらフラグを立てる
  200.  
  201. 2:    move.w    FHdl,d0
  202.     bsr    GetFHdl        * 次のファイルを得る        [wild.has]
  203.     tst.l    d0
  204.     bmi    Files_End
  205.     move.w    d0,FHdl
  206.     bra    4b
  207.  
  208. 3:
  209.     lea.l    (LocateErr_txt),a1
  210.     cmpi.w    #-2,d0
  211.     beq    @f
  212.     lea.l    (MemoryErr_txt),a1
  213.     cmpi.w    #-3,d0
  214.     beq    @f
  215.     lea.l    (ESC_key_txt),a1
  216.     cmpi.w    #-4,d0
  217.     beq    @f
  218.     lea.l    (File_Break_txt),a1
  219.     cmpi.w    #-5,d0
  220.     beq    @f
  221.     lea.l    (Playlist_NOread_txt),a1
  222.     cmpi.w    #-6,d0
  223.     beq    @f
  224.     lea.l    (NotFile_txt),a1
  225. @@:
  226.     jsr    (a6)
  227.     st    (FLG_V)
  228.     move.w    FHdl,d0
  229.     bsr    GetFHdl_Break    * 元PATHへ戻す            [wild.has]
  230.     lea.l    (Break_txt),a1
  231.     jsr    (a6)
  232. Files_End:
  233.     tst.b    (FLG_V)
  234.     bne    1f
  235.     tst.b    (FLG_EXT)
  236.     beq    EXT_PLUS    * "*"という指定だと、*.PCDを見落とすので戻る
  237.     lea.l    (PCD_NotFound_txt),a1
  238.     jsr    (a6)
  239. 1:
  240.     suba.l    a1,a1
  241.     IOCS    _B_SUPER
  242.     move.l    d0,a1
  243.  
  244.     move.w    (VCR2),($E82600)
  245.  
  246. 2:    tst.l    V_FLAME
  247.     beq    @f
  248.  
  249.     tst.b    (SW_Q)
  250.     bne    @f
  251.  
  252.     move.l    #-1,d1
  253.     IOCS    _B_LOCATE
  254.     move.l    d0,d7
  255.  
  256.     move.w    (FuncMODE),-(sp)
  257.     move.w    #$000e,-(a7)    * システムラインを元のモードに戻す
  258.     DOS    _CONCTRL    * 
  259.     addq.l    #4,a7        * 
  260.  
  261.     move.w    d7,d2
  262.     swap    d7
  263.     move.w    d7,d1
  264.     IOCS    _B_LOCATE
  265.  
  266. @@:
  267.  
  268.     tst.b    (SW_S)
  269.     beq    @f
  270.     tst.b    (SW_Q)
  271.     bne    @f
  272.     moveq.l    #-1,d1
  273.     IOCS    _SKEY_MOD
  274.     move.w    (TC1),($e82202)
  275. @@:    IOCS    _B_SUPER
  276.     IOCS    _OS_CURON
  277. *------------------------------
  278. * 正常終了
  279. *------------------------------
  280. Pro_Exit:
  281.     tst.l    V_FLAME
  282.     bne    @f
  283.     moveq.l    #0,d0
  284.     bsr    GA_DISP
  285. @@:    bsr    K_Clear
  286.     DOS    _EXIT
  287.  
  288. *------------------------------
  289. * 異常終了
  290. *------------------------------
  291. Pro_Exit2:
  292.     move.w    d0,-(sp)
  293.  
  294.     tst.l    V_FLAME
  295.     bne    @f
  296.     moveq.l    #0,d0
  297.     bsr    GA_DISP
  298.     bra    1f
  299.  
  300. @@:    move.l    #-1,d1
  301.     IOCS    _B_LOCATE
  302.     move.l    d0,d7
  303.  
  304.     move.w    (FuncMODE),-(sp)
  305.     move.w    #$000e,-(a7)    * システムラインを元のモードに戻す
  306.     DOS    _CONCTRL    * 
  307.     addq.l    #4,a7        * 
  308.  
  309.     cmpi.w    #3,FuncMODE
  310.     beq    @f
  311.     cmpi.w    #31,d7
  312.     bcs    @f
  313.     move.w    #30,d7
  314.  
  315. @@:    move.w    d7,d2
  316.     swap    d7
  317.     move.w    d7,d1
  318.     IOCS    _B_LOCATE
  319.  
  320. 1:    bsr    K_Clear
  321.     IOCS    _OS_CURON
  322.  
  323.     DOS    _EXIT2
  324. *------------------------------
  325. * メモリに展開
  326. *------------------------------
  327. Load_Memory:
  328.     move.w    FHdl,d0
  329.     bsr    ChkPCD        * ファイルフォーマットを調査        [chkpcd.has]
  330.     tst.w    d0
  331.     bmi    Pro_Exit2    * d0.w<0の時、イメージパックデータではない
  332.  
  333.     move.w    (IMAGE_NUM),d1    * 指定データが存在するかチェック
  334.     btst.l    d1,d0        * フォトCDカタログで保証されているのは1/16BASEのみ
  335.     beq    LM_exit3
  336.  
  337.     move.w    FHdl,d0
  338.     bsr    Seek_PCD    * 画像データ位置までSEEK        [chkpcd.has]
  339.  
  340.     lea.l    (DEC_WORK),a1
  341.     add.w    d1,d1
  342.  
  343.     clr.l    -(sp)
  344.     DOS    _SUPER
  345.     move.l    d0,(sp)
  346.  
  347.     tst.b    (SW_S)
  348.     bne    Square_Mode
  349.  
  350.     lea.l    (BASEDATA_X),a0
  351.     add.w    (a0,d1.w),a0
  352.  
  353.     move.l    (a0)+,(a1)+
  354.     move.l    (a0)+,(a1)+
  355.     move.l    (a0)+,(a1)+
  356.     move.w    (-8,a1),d1
  357.     addq.l    #1,d1
  358.     add.w    d1,d1    1/3
  359.     add.w    d1,d1    2/3
  360.     move.w    (SW_W),d0
  361.     bne    @f
  362.     move.w    IMAGE_NUM,d0
  363.     add.w    d0,d0
  364.     move.w    (1f,pc,d0.w),d0
  365. @@:    cmp.w    d1,d0
  366.     bmi    LM_exit3    * 展開先に充分な幅がない
  367.     move.w    d0,(a1)+
  368.     add.w    d0,d0
  369.     move.w    d0,(a1)+
  370.     lea.l    (DEC_WORK),a1
  371.     move.l    (Graph_Ptr),a0
  372.     move.w    (FHdl),d0
  373.     bsr    YCC2XHI_X    * 画像を展開する        [pcddec.has]
  374.     bra    LM_1
  375.     .align    4
  376. 1:    .dc.w    128*2,256*2,512*2    * ,1024*2,2048*2
  377. 2:    .dc.w    192*2,384*2,768*2    * ,1536*2,3072*2(そもそもメモリが足りない)
  378.  
  379. Square_Mode:
  380.     lea.l    (BASEDATA_S),a0
  381.     add.w    (a0,d1.w),a0
  382.  
  383.     move.l    (a0)+,(a1)+
  384.     move.l    (a0)+,(a1)+
  385.     move.l    (a0)+,(a1)+
  386.     move.w    (SW_W),d0
  387.     bne    @f
  388.     move.w    IMAGE_NUM,d0
  389.     add.w    d0,d0
  390.     move.w    (2b,pc,d0.w),d0
  391. @@:    cmp.w    (-2,a1),d0
  392.     ble    LM_exit3    * 展開先に充分な幅がない
  393.     move.w    d0,(a1)+
  394.     add.w    d0,d0
  395.     move.w    d0,(a1)+
  396.     lea.l    (DEC_WORK),a1
  397.     move.l    (Graph_Ptr),a0
  398.     move.w    (FHdl),d0
  399.     bsr    YCC2XHI_S    * 画像を展開する        [pcddec.has]
  400. LM_1:    tst.l    d0
  401.     bmi    LM_exit3
  402.     move.w    (FHdl),d0
  403.     bsr    GetFHdl_Break    * パスを元に戻す            [wild.has]
  404.     moveq.l    #0,d0
  405.     DOS    _SUPER
  406.     addq.l    #4,sp
  407.     bra    Pro_Exit
  408.     .align    4
  409.  
  410. LM_exit3:
  411.     move.w    (FHdl),d0
  412.     bsr    GetFHdl_Break    * パスを元に戻す            [wild.has]
  413.     DOS    _SUPER
  414.     addq.l    #4,sp
  415.     moveq.l    #-1,d0
  416.     bra    Pro_Exit2
  417.  
  418. *------------------------------
  419. * メッセージ表示(SW_Qで影響)
  420. *------------------------------
  421. Print_Job:
  422.     IOCS    _B_PRINT
  423. NoPrint_Job:
  424.     rts
  425.  
  426. *------------------------------
  427. * 指定ファイルはない
  428. *------------------------------
  429. NotFoundFile_err:
  430.     lea.l    (NoFFile_Txt),a1
  431.     jsr    (a6)
  432.     bra    Pro_Exit2
  433.  
  434. *------------------------------
  435. * コマンドライン無し
  436. *------------------------------
  437. NoCMD:
  438.     move.l    (ExecFN),-(sp)
  439.     DOS    _PRINT
  440.     pea    (title_txt)
  441.     DOS    _PRINT
  442.     pea    (Help_txt)
  443.     DOS    _PRINT
  444.     pea    (NoFile_Txt)
  445.     DOS    _PRINT
  446.     lea.l    (16,sp),sp
  447.     bra    Pro_Exit2
  448.  
  449. *------------------------------
  450. * コマンドライン解釈部(頭がウニウニ)
  451. *------------------------------
  452. ChkCMD:
  453.     move.b    (a2)+,d0
  454.     beq    ChkCMD_Exit
  455.     cmpi.b    #SPACE,d0
  456.     beq    ChkCMD
  457.     cmpi.b    #TAB,d0        * でも僕はタブコードでコマンドラインを区切ったことは
  458.     beq    ChkCMD        * ありません(除く:makefile)
  459.     cmpi.b    #'-',d0        * '-'で始まるファイル名は作れますが
  460.     beq    ChkCMD_SW    * 作らないように(command.xの内部コマンドが対応出来ない)
  461.     cmpi.b    #'/',d0        * '/'でパスを区切っている人は、
  462.     beq    ChkCMD_SW    * 相対指定するか、ドライブ名をつけましょう
  463.  
  464.     st    (SW_FN)        * ファイルネーム取り込み処理
  465.     lea.l    (Target_File),a0
  466. @@:    move.b    d0,(a0)+
  467.     move.b    (a2)+,d0
  468.     beq    ChkCMD_FCopy_Exit
  469.     cmpi.b    #SPACE,d0
  470.     beq    ChkCMD_FCopy_Break
  471.     cmpi.b    #TAB,d0
  472.     beq    ChkCMD_FCopy_Break
  473.     bra    @b
  474. ChkCMD_FCopy_Break:
  475.     clr.b    (a0)
  476.     bra    ChkCMD
  477. ChkCMD_FCopy_Exit:
  478.     clr.b    (a0)
  479.     bra    ChkCMD_Exit
  480.  
  481. ChkCMD_Exit2:            * コマンドラインエラーが発見された時
  482.     st    (SW_E)        * '-'で終わっていた時とか
  483.  
  484. ChkCMD_Exit:
  485.     rts            * 初期化部に戻る
  486.  
  487. ChkCMD_Continue:
  488.     st    (SW_E)        * コマンドラインエラーが発見されたけど
  489.     bra    ChkCMD        * コマンドラインが続いた場合(-Q指定を探す)
  490.  
  491. ChkCMD_SW:
  492.     clr.w    d0
  493.     move.b    (a2)+,d0
  494.     beq    ChkCMD_Exit2
  495.     cmpi.b    #'?',d0
  496.     beq    ChkCMD_Help
  497.     cmpi.b    #$40,d0
  498.     bmi    ChkCMD_SW_01234    * かなり適当
  499.  
  500.     andi.b    #$5f,d0
  501.  
  502.     cmpi.b    #'A',d0
  503.     beq    ChkCMD_Address    * 展開アドレス指定
  504.  
  505.     cmpi.b    #'B',d0
  506.     beq    ChkCMD_Bright    * 明るさ調整
  507.  
  508.     cmpi.b    #'F',d0
  509.     beq    ChkCMD_Fource    * TGUSEMDの値を無視
  510.  
  511.     cmpi.b    #'Q',d0
  512.     beq    ChkCMD_Quiet    * 沈黙モード(一切のテキスト出力を行わない)
  513.  
  514.     cmpi.b    #'S',d0
  515.     beq    ChkCMD_Square    * 正方形モード設定
  516.  
  517.     cmpi.b    #'G',d0
  518.     beq    ChkCMD_GVRAM    * G-RAMへ表示
  519.  
  520.     cmpi.b    #'P',d0
  521.     beq    ChkCMD_PLread    * PLAYLIST.PCDを強制読み込み
  522.  
  523.     cmpi.b    #'L',d0
  524.     beq    ChkCMD_Locate    * 展開座標指定(アドレスモード時不可)
  525.  
  526.     cmpi.b    #'W',d0        * アドレスモード時に必ず指定すること
  527.     beq    ChkCMD_Width    * 展開バッファの横バイト数(十進)デフォルトは展開Xサイズ*2
  528.  
  529.     cmpi.b    #'K',d0
  530.     beq    ChkCMD_Keysns    * キー入力対応
  531.  
  532.     cmpi.b    #'H',d0
  533.     beq    ChkCMD_Help    * ヘルプメッセージ出力
  534.  
  535.     rts
  536. *------------------------------
  537. * 展開アドレス指定モード
  538. *------------------------------
  539. ChkCMD_Address:
  540.     st    (SW_A)
  541.     st    (SW_Q)
  542.     bsr    INTget
  543.     tst.l    d0
  544.     bmi    ChkCMD_Continue    * 読み取りエラー
  545.     btst.l    #0,d0
  546.     bne    ChkCMD_Continue    * 奇数アドレス指定エラー
  547.     move.l    d0,(Graph_Ptr)
  548.     bra    ChkCMD
  549.  
  550. *------------------------------
  551. * アドレスモード時の1ラインバイト数
  552. *------------------------------
  553. ChkCMD_Width:
  554.     bsr    INTget
  555.     tst.l    d0
  556.     bmi    ChkCMD_Continue
  557.     btst.l    #0,d0
  558.     bne    ChkCMD_Continue    * 奇数バイト指定エラー
  559.     move.w    d0,SW_W
  560. @@:    bra    ChkCMD
  561.  
  562. *------------------------------
  563. * 展開座標指定
  564. *------------------------------
  565. ChkCMD_Locate:
  566.     bsr    INTget
  567.     tst.l    d0
  568.     bmi    ChkCMD_Continue
  569.     move.w    d0,SW_LX
  570.     move.b    (a2)+,d0
  571.     beq    ChkCMD_Exit2
  572.     cmpi.b    #',',d0
  573.     bne    @f
  574.     bsr    INTget
  575.     tst.l    d0
  576.     bmi    ChkCMD_Continue
  577.     move.w    d0,SW_LY
  578. @@:    bra    ChkCMD
  579.  
  580. *------------------------------
  581. * 沈黙モード
  582. *------------------------------
  583. ChkCMD_Quiet:
  584.     st    (SW_Q)
  585.     bra    ChkCMD
  586.  
  587. *------------------------------
  588. * 説明モード?
  589. *------------------------------
  590. ChkCMD_Help:
  591.     st    (SW_H)
  592.     bra    ChkCMD
  593.  
  594. *------------------------------
  595. * キーセンスモード
  596. *------------------------------
  597. ChkCMD_Keysns:
  598.     st    (SW_K)
  599.     bra    ChkCMD
  600.  
  601. *------------------------------
  602. * 正方形モード
  603. *------------------------------
  604. ChkCMD_Square:
  605.     st    (SW_S)
  606.     bra    ChkCMD
  607.  
  608. *------------------------------
  609. * TS-6BGA未使用モード
  610. *------------------------------
  611. ChkCMD_GVRAM:
  612.     st    (SW_G)
  613.     bra    ChkCMD
  614.  
  615. *------------------------------
  616. * PALYLIST_PCD強制読み込み
  617. *------------------------------
  618. ChkCMD_PLread:
  619.     st    (SW_P)
  620.     bra    ChkCMD
  621.  
  622. *------------------------------
  623. * 強制GVRAM使用モード
  624. *------------------------------
  625. ChkCMD_Fource:
  626.     st    (SW_F)
  627.     bra    ChkCMD
  628.  
  629. *------------------------------
  630. * 明るさ調整数値読取(0-200%)
  631. *------------------------------
  632. ChkCMD_Bright:
  633.     bsr    INTget
  634.     tst.l    d0
  635.     bmi    @f
  636.     cmp.w    #200,d0
  637.     bgt    @f
  638.     move.w    d0,(DEF_Y)
  639.     bra    ChkCMD
  640. @@:
  641.     st    (SW_BE)
  642.     bra    ChkCMD_Continue
  643. *------------------------------
  644. * 画像指定
  645. *------------------------------
  646. ChkCMD_SW_01234:        * -0,-1,-2(,-3,-4)
  647.     sub.w    #'0',d0
  648.     bmi    ChkCMD_Exit2
  649.     cmpi.w    #2,d0
  650. *    cmpi.w    #4,d0        * 本当は4BASE,16BASEに対応したかった(ハフマン圧縮らしい)
  651.     bgt    ChkCMD_Exit2    * コダックのシステムでは1024BASEまでではサポート出来るらしい・・・
  652.     move.w    d0,IMAGE_NUM
  653.     bra    ChkCMD
  654.  
  655. *------------------------------
  656. * 数字読み取り
  657. *------------------------------
  658. INTget:
  659.     move.l    d1,-(sp)
  660.     moveq.l    #0,d0
  661.     moveq.l    #-1,d1
  662.     move.w    #0,d1
  663.     move.b    (a2)+,d0
  664.     beq    Str2Bin_e        * 読み取るものがなかった。
  665.  
  666.     cmpi.b    #SPACE,d0
  667.     beq    Str2Bin_e2
  668.     cmpi.b    #TAB,d0
  669.     beq    Str2Bin_e2
  670.     cmpi.b    #'$',d0
  671.     beq    Hex2Bin
  672.     cmpi.b    #'0',d0
  673.     beq    Hex?
  674. NoHex:
  675.     subi.b    #'0',d0
  676.     bmi    Str2Bin_e
  677.     cmpi.b    #9,d0
  678.     bgt    Str2Bin_e
  679.     mulu.w    #10,d1
  680.     add.l    d0,d1
  681.  
  682.     move.b    (a2)+,d0
  683.     bne    NoHex
  684. Str2Bin_e:
  685.     subq.l    #1,a2
  686. Str2Bin_e2:
  687.     move.l    d1,d0
  688.     movem.l    (sp)+,d1
  689.     rts
  690. Hex?:
  691.     moveq.l    #0,d1
  692.     move.b    (a2)+,d0
  693.     beq    Str2Bin_e
  694.     cmpi.b    #'x',d0
  695.     beq    Hex2Bin_loop
  696.     cmpi.b    #'X',d0
  697.     beq    Hex2Bin_loop
  698.     move.b    #'0',d0
  699.     subq.l    #1,a2
  700.     bra    NoHex
  701. Hex2Bin:
  702.     moveq.l    #0,d1
  703. Hex2Bin_loop:
  704.     move.b    (a2)+,d0
  705.     beq    Str2Bin_e
  706.     cmpi.w    #'0',d0
  707.     bmi    Str2Bin_e
  708.     cmpi.w    #'9',d0
  709.     ble    Hex2Bin_Suji
  710.     cmpi.w    #'A',d0
  711.     bmi    Str2Bin_e
  712.     cmpi.w    #'f',d0
  713.     bgt    Str2Bin_e
  714.     cmpi.w    #'F',d0
  715.     ble    Hex2Bin_Hex
  716.     cmpi.w    #'a',d0
  717.     bmi    Str2Bin_e
  718. Hex2Bin_Hex:
  719.     andi.b    #$5f,d0
  720.     sub.w    #'A'-10,d0
  721. @@:    lsl.l    #4,d1
  722.     add.w    d0,d1
  723.     bra    Hex2Bin_loop
  724. Hex2Bin_Suji:
  725.     sub.w    #'0',d0
  726.     bra    @b
  727. *------------------------------
  728. * データセクション
  729. *------------------------------
  730.     .data
  731. title_txt:
  732.     .dc.b    ' ver1.24    by Fa.Tom,まる丸 1996/1997',$d,$a
  733.     .dc.b    ' コダックPhotoCDフォーマットの画像を表示します。',$d,$a,0
  734. Help_txt:
  735.     .dc.b    '  -0           192*128を展開(128*128,-S時192*128)',$d,$a
  736.     .dc.b    '  -1           384*256を展開(256*256,-S時384*256)',$d,$a
  737.     .dc.b    '  -2           768*512を展開(512*512,-S時768*512)',$d,$a
  738.     .dc.b    '               デフォルト画像は768*512(BASEサイズ)',$d,$a
  739.     .dc.b    '  -S           正方形モード',$d,$a
  740.     .dc.b    '  -Axxxxxx     アドレスモード(メインメモリに展開・-Wも同時に指定して下さい)',$d,$a
  741.     .dc.b    '  -Wnnn        1ラインのバイト数(アドレスモード時に影響)',$d,$a
  742.     .dc.b    '  -Bnnn        明るさ調整(0-200%)',$d,$a
  743.     .dc.b    '  -K           キー待ち',$d,$a
  744.     .dc.b    '  -Lx,y        画像展開位置',$d,$a
  745.     .dc.b    '  -G           TS-6BGAを使用しない',$d,$a
  746.     .dc.b    '  -P           PLAYLIST.PCD強制読み込み',$d,$a
  747.     .dc.b    '  -F           GVRAM強制使用',$d,$a
  748.     .dc.b    '  -Q           テキスト表示抑制(TVRAMを一切書き替えません)',$d,$a
  749.     .dc.b    '  -H,-?        このヘルプメッセージを表示します',$d,$a
  750.     .dc.b    '  filenameにはワイルドカードが使用出来ます',$d,$a
  751.     .dc.b    '  数値指定部を 0x,$ で始めると16進表記が出来ます',$d,$a,0
  752. NoFile_Txt:    .dc.b    'コマンドラインにファイルネームが必要です',$d,$a,0
  753. GVRAM_SYSTEM_USE_txt:
  754.     .dc.b    'GVRAMはシステムで使用中です',$d,$a,0
  755. GVRAM_APRI_USE_txt:
  756.     .dc.b    'GVRAMはアプリケーションが使用中です',$d,$a,0
  757. NoFFile_Txt:
  758.     .dc.b    '指定ファイルがありません',$d,$a,0
  759. Break_txt:
  760.     .dc.b    '処理を中断します',$d,$a,0
  761. PCD_NotFound_txt:
  762.     .dc.b    '指定ファイルはPhotoCDフォーマットとして認識出来なかったか',$d,$a
  763.     .dc.b    '未対応のフォーマットでした。',$d,$a,0
  764. BrightErr_Txt:    .dc.b    '-Bの有効範囲は0~200です',$d,$a,0
  765. LocateErr_txt:
  766.     .dc.b    '-Lオプションの指定値が範囲外です',$d,$a,0
  767. NotFile_txt:
  768.     .dc.b    'ファイルアクセスに失敗しました',$d,$a,0
  769. MemoryErr_txt:
  770.     .dc.b    '画像展開に必要なメモリが確保出来ませんでした',$d,$a,0
  771. ESC_key_txt:
  772.     .dc.b    'ESCキーが押されました。',$d,$a,0
  773. File_Break_txt:
  774.     .dc.b    'データが最後まで無いようです。',$d,$a,0
  775. Playlist_NOread_txt:
  776.     .dc.b    'PLAYLIST.PCDの読み込みに失敗しました。',$d,$a,0
  777.     .align    4
  778. Graph_Ptr:    .dc.l    $c00000
  779. SW_LX:        .dc.w    0
  780. SW_LY:        .dc.w    0
  781. DEF_Y:        .dc.w    100
  782. IMAGE_NUM:    .dc.w    2
  783. SW_W:        .dc.w    0
  784. SW_A:        .dc.b    0
  785. SW_E:        .dc.b    0
  786. SW_F:        .dc.b    0
  787. SW_FN:        .dc.b    0
  788. SW_G:        .dc.b    0
  789. SW_H:        .dc.b    0
  790. SW_K:        .dc.b    0
  791. SW_N:        .dc.b    0
  792. SW_Q:        .dc.b    0
  793. SW_S:        .dc.b    0
  794. SW_BE:        .dc.b    0
  795. SW_PF:        .dc.b    0
  796. SW_P:        .dc.b    0
  797. FLG_V:        .dc.b    0
  798. FLG_EXT:    .dc.b     0
  799. FLG_WP:        .dc.b    0
  800. *------------------------------
  801. * ブロックストレージセクション
  802. *------------------------------
  803.     .bss
  804.     .align    4
  805. DEC_WORK:    .ds.w    8
  806. ExecFN:    .ds.l    1
  807. CurLOC:    .ds.l    1
  808. FHdl:    .ds.w    1
  809. VCR2:    .ds.w    1
  810. FuncMODE:    .ds.w    1
  811. Target_File:    .ds.b    128
  812. V_FLAME:    .ds.l    1
  813. *------------------------------
  814. * スタックセクション
  815. *------------------------------
  816.     .stack
  817.     .ds.l    1000
  818. StackBtm:
  819.     .end    ProStart
  820.